diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index b8e0d62fd9..699ee3b8ea 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -2,7 +2,7 @@ from django.core.exceptions import ValidationError
 from django.forms import Form
 from django.forms.fields import BooleanField, IntegerField
 from django.forms.utils import ErrorList
-from django.forms.widgets import HiddenInput, NumberInput
+from django.forms.widgets import HiddenInput, NumberInput, CheckboxInput
 from django.utils.functional import cached_property
 from django.utils.html import html_safe
 from django.utils.safestring import mark_safe
@@ -56,6 +56,7 @@ class BaseFormSet:
     A collection of instances of the same Form class.
     """
     ordering_widget = NumberInput
+    deletion_widget = CheckboxInput
     default_error_messages = {
         'missing_management_form': _(
             'ManagementForm data is missing or has been tampered with. Missing fields: '
@@ -287,6 +288,9 @@ class BaseFormSet:
     def get_ordering_widget(cls):
         return cls.ordering_widget
 
+    def get_deletion_widget(self):
+        return self.deletion_widget
+
     def non_form_errors(self):
         """
         Return an ErrorList of errors that aren't associated with a particular
@@ -417,7 +421,7 @@ class BaseFormSet:
                     widget=self.get_ordering_widget(),
                 )
         if self.can_delete and (self.can_delete_extra or index < initial_form_count):
-            form.fields[DELETION_FIELD_NAME] = BooleanField(label=_('Delete'), required=False)
+            form.fields[DELETION_FIELD_NAME] = BooleanField(label=_('Delete'), required=False, widget=self.get_deletion_widget())
 
     def add_prefix(self, index):
         return '%s-%s' % (self.prefix, index)
